home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
DEMON
/
GNU
/
PDMake
/
c
/
check
next >
Wrap
Text File
|
1995-03-29
|
3KB
|
131 lines
/* > c.check
*
*$Id: c.check 1.7 95/04/19 22:44:23 root Rel $
*
* $Log: c.check $
* Revision 1.7 95/04/19 22:44:23 root
* Checked in for release
*
* Revision 1.6 95/04/19 22:34:14 root
* Added MYNAME symbol in place of an argv[0] pathname
*
* Revision 1.5 95/04/18 21:46:59 root
* *** empty log message ***
*
* Revision 1.4 95/04/18 21:41:48 root
* Tidied for release
*
* Revision 1.3 95/04/11 03:15:16 root
* Added Log messages
*
* Check structures for make.
*/
#include "h.h"
/*
* Prints out the structures as defined in memory. Good for check
* that you make file does what you want (and for debugging make).
*/
void
prt(void)
{
register struct name * np;
register struct depend * dp;
register struct line * lp;
register struct cmd * cp;
register struct macro * mp;
for (mp = macrohead; mp; mp = mp->m_next)
fprintf(stderr, "%s = %s\n", mp->m_name, mp->m_val);
fputc('\n', stderr);
for (np = namehead.n_next; np; np = np->n_next)
{
if (np->n_flag & N_DOUBLE)
fprintf(stderr, "%s::\n", np->n_name);
else
fprintf(stderr, "%s:\n", np->n_name);
if (np == firstname)
fprintf(stderr, "(MAIN NAME)\n");
for (lp = np->n_line; lp; lp = lp->l_next)
{
fputc(':', stderr);
for (dp = lp->l_dep; dp; dp = dp->d_next)
fprintf(stderr, " %s", dp->d_name->n_name);
fputc('\n', stderr);
for (cp = lp->l_cmd; cp; cp = cp->c_next)
fprintf(stderr, "-\t%s\n", cp->c_cmd);
fputc('\n', stderr);
}
fputc('\n', stderr);
}
}
/*
* Recursive routine that does the actual checking.
*/
void check(struct name *np)
{
register struct depend * dp;
register struct line * lp;
if (np->n_flag & N_MARK)
fatal("Circular dependency from %s",(int) np->n_name);
np->n_flag |= N_MARK;
for (lp = np->n_line; lp; lp = lp->l_next)
for (dp = lp->l_dep; dp; dp = dp->d_next)
check(dp->d_name);
np->n_flag &= ~N_MARK;
}
/*
* Look for circular dependancies.
* ie.
* a: b
* b: a
* is a circular dep
*/
void
circh(void)
{
register struct name * np;
for (np = namehead.n_next; np; np = np->n_next)
check(np);
}
/*
* Check the target .PRECIOUS, and mark its dependentd as precious
*/
void
precious(void)
{
register struct depend * dp;
register struct line * lp;
register struct name * np;
if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
return;
for (lp = np->n_line; lp; lp = lp->l_next)
for (dp = lp->l_dep; dp; dp = dp->d_next)
dp->d_name->n_flag |= N_PREC;
}